package com.roads.project.service;

import java.io.InputStream;
import java.util.List;
import com.roads.project.domain.ProBoqMeterage;
import com.roads.project.domain.ProInstitutionDetail;
import org.apache.ibatis.annotations.Param;

/**
 * 计量清单Service接口
 * 
 * @author nhp
 * @date 2021-12-14
 */
public interface IProBoqMeterageService {

    /**
     * 根据主键ID查询详情
     * 
     * @param id 计量清单主键
     * @return 计量清单
     */
    ProBoqMeterage getModelById(Long id);

    /**
     * 根据计量清单编号查询详情
     *
     * @param meterageBoqCode 计量清单编号
     * @return 计量清单
     */
    ProBoqMeterage getModelByCode(String meterageBoqCode);

    /**
     * 查询列表
     * 
     * @param model 计量清单
     * @return 计量清单集合
     */
    List<ProBoqMeterage> selectModelList(ProBoqMeterage model);

    /**
     * 查询标段计量清单数量
     *
     * @param institutionCode 标段编号
     * @return 数量
     */
    int countMeterage(String institutionCode);

    /**
     * 标段下的计量清单是否有参与计量
     *
     * @param institutionCode 标段编号
     * @return 结果
     */
    boolean hasPartakeMeterage(String institutionCode);

    /**
     * 变更令号下的变更计量清单是否参与计量
     *
     * @param changeOrderNo 变更令号
     * @return 结果
     */
    boolean hasPartakeMeterageByChangeOrderNo(String changeOrderNo);

    /**
     * 获取该计量清单合同计量数量
     *
     * @param meterageBoqCode 计量清单编号
     * @return 数量
     */
    int getContractMeterageCount(String meterageBoqCode);

    /**
     * 获取该计量清单变更计量数量
     *
     * @param meterageBoqCode 计量清单编号
     * @return 数量
     */
    int getChangeMeterageCount(String meterageBoqCode);

    /**
     * 新增
     * 
     * @param model 计量清单
     * @return 结果
     */
    int insert(ProBoqMeterage model);

    /**
     * 修改
     * 
     * @param model 计量清单
     * @return 结果
     */
    int update(ProBoqMeterage model);

    /**
     * 批量删除
     * 
     * @param ids 主键集合
     * @return 结果
     */
    int deleteByIds(Long[] ids);

    /**
     * 删除
     * 
     * @param id 计量清单主键
     * @return 结果
     */
    int delete(Long id);

    /**
     * 根据变更令号删除变更计量清单
     *
     * @param changeOrderNo 变更令号
     * @return 结果
     */
    int deleteChangeBoqByChangeOrderNo(String changeOrderNo);

    /**
     * 清空标段计量清单
     *
     * @param institutionCode 标段编号
     */
    void clean(String institutionCode);

    /**
     * 生成计量清单
     *
     * @param userName 登录用户
     * @param detailBid 标段详情
     * @param institutionCode 标段编号
     * @param bigTypeValue 清单大类值
     * @return 结果
     */
    int generate(String userName, ProInstitutionDetail detailBid, String institutionCode, String bigTypeValue);

    /**
     * 计量清单导入
     *
     * @param list 数据集
     * @param institutionCode 标段编号
     * @param updateSupport 是否续导
     * @param userName 登录用户
     * @return 结果
     */
    String importData(List<ProBoqMeterage> list, String institutionCode, boolean updateSupport, String userName);

}
